package com.example.compassview;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.hardware.SensorListener;
import android.hardware.SensorManager;
import android.util.AttributeSet;
import android.widget.ImageView;
public class CompassView extends ImageView implements SensorListener {
private int direction = 0;
private Paint paint;
private SensorManager sensorManager;
public CompassView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
paint = new Paint();
paint.setColor(Color.WHITE);
paint.setStrokeWidth(2);
paint.setStyle(Style.STROKE);
sensorManager = (SensorManager) context
.getSystemService(Context.SENSOR_SERVICE);
sensorManager
.registerListener(this, SensorManager.SENSOR_ACCELEROMETER);
setImageResource(R.drawable.compass);
}
public CompassView(Context context, AttributeSet attrs) {
this(context, attrs, -1);
}
public CompassView(Context context) {
this(context, null, -1);
}
@Override
protected void onDraw(Canvas canvas) {
int height = this.getHeight();
int width = this.getWidth();
canvas.rotate(direction, width / 2, height / 2);
super.onDraw(canvas);
}
public interface CompassListener {
public void onCompassChanged(CompassView compassView, int data);
}
CompassListener compassListener;
public void setOnCompassListener(CompassListener listener) {
compassListener = listener;
}
@Override
public void onAccuracyChanged(int arg0, int arg1) {
}
@Override
public void onSensorChanged(int sensor, float[] values) {
if (sensor != SensorManager.SENSOR_ACCELEROMETER)
return;
this.direction = (int) values[0];
invalidate();
if( compassListener != null) {
compassListener.onCompassChanged(this, direction);
}
}
}